home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / H / tmp / libpq.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  7.7 KB  |  221 lines

  1. /* ----------------------------------------------------------------
  2.  *   FILE
  3.  *    libpq.h
  4.  *
  5.  *   DESCRIPTION
  6.  *    POSTGRES LIBPQ buffer structure definitions.
  7.  *
  8.  *   NOTES
  9.  *    This file contains definitions for structures and
  10.  *    externs for functions used by both frontend applications
  11.  *    and the POSTGRES backend.  See the files libpq-fe.h and
  12.  *    libpq-be.h for frontend/backend specific information
  13.  *
  14.  *   IDENTIFICATION
  15.  *    $Header: /private/postgres/src/lib/H/tmp/RCS/libpq.h,v 1.24 1992/08/03 18:17:51 mer Exp $
  16.  * ----------------------------------------------------------------
  17.  */
  18.  
  19. #ifndef LibpqIncluded     /* include this file only once. */
  20. #define LibpqIncluded     1
  21.  
  22. #include <stdio.h>
  23. #include <string.h>
  24. #include <sys/types.h>
  25. #include "tmp/simplelists.h"
  26. #include "utils/exc.h"
  27.  
  28. /* ----------------
  29.  * PQArgBlock --
  30.  *    Information (pointer to array of this structure) required
  31.  *    for the PQfn() call.
  32.  * ----------------
  33.  */
  34. typedef struct {
  35.     int len;
  36.     int isint;
  37.     union {
  38.         int *ptr;    /* can't use void (dec compiler barfs)    */
  39.     int integer;
  40.     } u;
  41. } PQArgBlock;
  42.  
  43. /* ----------------
  44.  * TypeBlock --
  45.  *     Information about an attribute.
  46.  * ----------------
  47.  */
  48. #define NameLength 16
  49.  
  50. typedef struct TypeBlock {
  51.     char name[NameLength];    /* name of the attribute */
  52.     int adtid;            /* adtid of the type */
  53.     int adtsize;        /* adtsize of the type */
  54. } TypeBlock;
  55.  
  56. /* ----------------
  57.  * TupleBlock --
  58.  *    Data of a tuple.
  59.  * ----------------
  60.  */
  61. #define TupleBlockSize 100
  62.  
  63. typedef struct TupleBlock {
  64.     char **values[TupleBlockSize];    /* an array of tuples */
  65.     int *lengths[TupleBlockSize];       /* an array of length vec. foreach
  66.                        tuple */
  67.     struct TupleBlock *next;        /* next tuple block */
  68.     int    tuple_index;            /* current tuple index */
  69. } TupleBlock;
  70.  
  71. /* ----------------
  72.  * GroupBuffer --
  73.  *     A group of tuples with the same attributes.
  74.  * ----------------
  75.  */
  76. typedef struct GroupBuffer {
  77.     int no_tuples;        /* number of tuples in this group */
  78.     int no_fields;        /* number of attributes */
  79.     TypeBlock *types;          /* types of the attributes */
  80.     TupleBlock *tuples;        /* tuples in this group */
  81.     struct GroupBuffer *next;    /* next group */
  82. } GroupBuffer;
  83.  
  84. /* ----------------
  85.  * PortalBuffer --
  86.  *    Data structure of a portal buffer.  
  87.  * ----------------
  88.  */
  89. typedef struct PortalBuffer {
  90.     int rule_p;            /* 1 if this is an asynchronized portal. */
  91.     int no_tuples;        /* number of tuples in this portal buffer */
  92.     int no_groups;        /* number of tuple groups */
  93.     GroupBuffer *groups;    /* tuple groups */
  94. } PortalBuffer;
  95.  
  96. /* ----------------
  97.  * PortalEntry --
  98.  *    an entry in the global portal table
  99.  *
  100.  * Note: the portalcxt is only meaningful for PQcalls made from
  101.  *       within a postgres backend.  frontend apps should ignore it.
  102.  * ----------------
  103.  */
  104. #define PortalNameLength 32
  105.  
  106. typedef struct PortalEntry {
  107.     char       name[PortalNameLength]; /* name of this portal */
  108.     PortalBuffer  *portal;              /* tuples contained in this portal */
  109.     Pointer      portalcxt;              /* memory context (for backend) */
  110.     Pointer      result;              /* result for PQexec */
  111. } PortalEntry;
  112.  
  113. #define MAXPORTALS 10
  114.  
  115. extern PortalEntry *portals[];
  116.  
  117. /*
  118.  *  Asynchronous notification
  119.  */
  120. typedef struct PQNotifyList {
  121.     char relname[16];        /* name of relation containing data */
  122.     int be_pid;            /* process id of backend */
  123.     int valid;            /* has this already been handled by user. */
  124.     SLNode Node;
  125. } PQNotifyList;
  126.  
  127. /*
  128.  * Exceptions.
  129.  */
  130.  
  131. #define libpq_raise(X, Y) ExcRaise((Exception *)(X), (ExcDetail) (Y),\
  132.                    (ExcData)0, (ExcMessage) 0)
  133.  
  134. extern Exception MemoryError, PortalError, PostquelError, ProtocolError;
  135.  
  136. /* 
  137.  * POSTGRES backend dependent Constants. 
  138.  */
  139.  
  140. #define initstr_length 256
  141. #define error_msg_length 4096
  142. #define command_length 20
  143. #define remark_length 80
  144. #define portal_name_length 16
  145.  
  146. extern    char PQerrormsg[error_msg_length];
  147. /*
  148.  * External functions.
  149.  */
  150. extern void pqdebug ARGS((char *target, char *msg));
  151. extern void pqdebug2 ARGS((char *target, char *msg1, char *msg2));
  152. extern void PQtrace ARGS(());
  153. extern void PQuntrace ARGS(());
  154. extern int PQnportals ARGS((int rule_p));
  155. extern void PQpnames ARGS((char **pnames, int rule_p));
  156. extern PortalBuffer *PQparray ARGS((char *pname));
  157. extern int PQrulep ARGS((PortalBuffer *portal));
  158. extern int PQntuples ARGS((PortalBuffer *portal));
  159. extern int PQninstances ARGS((PortalBuffer *portal));
  160. extern int PQngroups ARGS((PortalBuffer *portal));
  161. extern int PQntuplesGroup ARGS((PortalBuffer *portal, int group_index));
  162. extern int PQninstancesGroup ARGS((PortalBuffer *portal, int group_index));
  163. extern int PQnfieldsGroup ARGS((PortalBuffer *portal, int group_index));
  164. extern int PQfnumberGroup ARGS((PortalBuffer *portal, int group_index, char *field_name));
  165. extern char *PQfnameGroup ARGS((PortalBuffer *portal, int group_index, int field_number));
  166. extern GroupBuffer *PQgroup ARGS((PortalBuffer *portal, int tuple_index));
  167. extern int PQgetgroup ARGS((PortalBuffer *portal, int tuple_index));
  168. extern int PQnfields ARGS((PortalBuffer *portal, int tuple_index));
  169. extern int PQfnumber ARGS((PortalBuffer *portal, int tuple_index, char *field_name));
  170. extern char *PQfname ARGS((PortalBuffer *portal, int tuple_index, int field_number));
  171. extern int PQftype ARGS((PortalBuffer *portal, int tuple_index, int field_number));
  172. extern int PQsametype ARGS((PortalBuffer *portal, int tuple_index1, int tuple_index2));
  173. extern char *PQgetvalue ARGS((PortalBuffer *portal, int tuple_index, int field_number));
  174. extern int PQgetlength ARGS((PortalBuffer *portal, int tuple_index, int field_number));
  175. extern void PQclear ARGS((char *pname));
  176. void PQcleanNotify ARGS((void ));
  177. void PQnotifies_init ARGS((void ));
  178. PQNotifyList *PQnotifies ARGS((void ));
  179. void PQremoveNotify ARGS((PQNotifyList *nPtr ));
  180. void PQappendNotify ARGS((char *relname , int pid ));
  181.  
  182. extern caddr_t pbuf_alloc ARGS((size_t size));
  183. extern void pbuf_free ARGS((caddr_t pointer));
  184. extern PortalBuffer *pbuf_addPortal ARGS(());
  185. extern GroupBuffer *pbuf_addGroup ARGS((PortalBuffer *portal));
  186. extern TypeBlock *pbuf_addTypes ARGS((int n));
  187. extern TupleBlock *pbuf_addTuples ARGS(());
  188. extern char **pbuf_addTuple ARGS((int n));
  189. extern char *pbuf_addValues ARGS((int n));
  190. extern int *pbuf_addTupleValueLengths ARGS((int n));
  191. extern PortalEntry *pbuf_addEntry ARGS(());
  192. extern void pbuf_freeEntry ARGS((int i));
  193. extern void pbuf_freeTypes ARGS((TypeBlock *types));
  194. extern void pbuf_freeTuples ARGS((TupleBlock *tuples, int no_tuples, int no_fields));
  195. extern void pbuf_freeGroup ARGS((GroupBuffer *group));
  196. extern void pbuf_freePortal ARGS((PortalBuffer *portal));
  197. extern int pbuf_getIndex ARGS((char *pname));
  198. extern PortalEntry *pbuf_setup ARGS((char *pname));
  199. extern void pbuf_close ARGS((char *pname));
  200. extern GroupBuffer *pbuf_findGroup ARGS((PortalBuffer *portal, int group_index));
  201. extern pbuf_findFnumber ARGS((GroupBuffer *group, char *field_name));
  202. extern void pbuf_checkFnumber ARGS((GroupBuffer *group, int field_number));
  203. extern char *pbuf_findFname ARGS((GroupBuffer *group, int field_number));
  204. extern void pq_init ARGS((int fd));
  205. extern void pq_gettty ARGS((int tp));
  206. extern int pq_getport ARGS(());
  207. extern void pq_close ARGS(());
  208. extern void pq_flush ARGS(());
  209. extern int pq_getstr ARGS((char *s, int maxlen));
  210. extern int pq_getnchar ARGS((char *s, int off, int maxlen));
  211. extern int pq_getint ARGS((int b));
  212. extern void pq_putstr ARGS((char *s));
  213. extern void pq_putnchar ARGS((char *s, int n));
  214. extern void pq_putint ARGS((int i, int b));
  215. extern int pq_getinaddr ARGS((struct sockaddr_in *sin, char *host, int port));
  216. extern int pq_getinserv ARGS((struct sockaddr_in *sin, char *host, char *serv));
  217. int pq_connect ARGS((char *dbname , char *user , char *args , char *hostName , char *debugTty , char *execFile , int portName ));
  218. extern int pq_accept ARGS(());
  219.     
  220. #endif LibpqIncluded
  221.